﻿using System;
using System.Text;

namespace AlgorytmyGenetyczne
{
    public class Rozwiazanie : IEquatable<Rozwiazanie>
    {
        public double[] Argumenty { get; private set; }
        public double Wartosc { get; private set; }

        public Rozwiazanie(double[] argumenty, double wartosc)
        {
            Argumenty = argumenty;
            Wartosc = wartosc;
        }

        public override string ToString()
        {
            StringBuilder str = new StringBuilder();
            if(Argumenty != null)
            {
                for(int i = 0; i< Argumenty.Length; i++)
                {
                    str.Append(Argumenty[i]);
                    if(i < Argumenty.Length - 1)
                    {
                        str.Append(" ; ");
                    }
                }
            }
            return str.ToString();
        }

        public bool Equals(Rozwiazanie other)
        {
            if (ReferenceEquals(null, other)) return false;
            if (ReferenceEquals(this, other)) return true;
            return Equals(other.Argumenty, Argumenty) && other.Wartosc == Wartosc;
        }

        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            if (obj.GetType() != typeof (Rozwiazanie)) return false;
            return Equals((Rozwiazanie) obj);
        }

        public override int GetHashCode()
        {
            unchecked
            {
                return ((Argumenty != null ? Argumenty.GetHashCode() : 0)*397) ^ Wartosc.GetHashCode();
            }
        }

        public static bool operator ==(Rozwiazanie left, Rozwiazanie right)
        {
            return Equals(left, right);
        }

        public static bool operator !=(Rozwiazanie left, Rozwiazanie right)
        {
            return !Equals(left, right);
        }
    }
}
